AlR_HdR_plot <- ggplot(data = AlR_HdR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = AlR_HdR_axis_set$chr,
breaks = AlR_HdR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(AlR_HdR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Altamaha R. vs Hudson R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
AlR_HdR_plot

AlR_PtR_plot <- ggplot(data = AlR_PtR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = AlR_PtR_axis_set$chr,
breaks = AlR_PtR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(AlR_PtR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Altamaha R. vs Petitcodiac R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
AlR_PtR_plot

LkH_AlR_plot <- ggplot(data = LkH_AlR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = LkH_AlR_axis_set$chr,
breaks = LkH_AlR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(LkH_AlR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "L. Hartwell vs Altamaha R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
LkH_AlR_plot

LkH_HdR_plot <- ggplot(data = LkH_HdR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = LkH_HdR_axis_set$chr,
breaks = LkH_HdR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(LkH_HdR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "L. Hartwell vs Hudson R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
LkH_HdR_plot

LkH_LkY_plot <- ggplot(data = LkH_LkY,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = LkH_LkY_axis_set$chr,
breaks = LkH_LkY_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(LkH_LkY_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "L. Hartwell vs L. Yonah Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
LkH_LkY_plot

LkH_PtR_plot <- ggplot(data = LkH_PtR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = LkH_PtR_axis_set$chr,
breaks = LkH_PtR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(LkH_PtR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "L. Hartwell vs Petitcodiac R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
LkH_PtR_plot

LkY_AlR_plot <- ggplot(data = LkY_AlR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = LkY_AlR_axis_set$chr,
breaks = LkY_AlR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(LkY_AlR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "L. Yonah vs Altamaha R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
LkY_AlR_plot

LkY_HdR_plot <- ggplot(data = LkY_HdR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = LkY_HdR_axis_set$chr,
breaks = LkY_HdR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(LkY_HdR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "L. Yonah vs Hudson R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
LkY_HdR_plot

LkY_PtR_plot <- ggplot(data = LkY_PtR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = LkY_PtR_axis_set$chr,
breaks = LkY_PtR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(LkY_PtR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "L. Yonah vs Petitcodiac R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
LkY_PtR_plot

PtR_HdR_plot <- ggplot(data = PtR_HdR,
mapping = aes(x = pos_cum,
y = Fst,
color = as_factor(chr))) +
geom_point(alpha = 0.75, size = 0.5) +
scale_x_continuous(label = PtR_HdR_axis_set$chr,
breaks = PtR_HdR_axis_set$center) +
scale_y_continuous(expand = c(0,0),
limits = c(-0.05, 1)) +
scale_color_manual(values = rep(c("#242b35", "#869ca8"),
unique(length(PtR_HdR_axis_set$chr)))) +
labs(x = NULL,
y = "Fst",
title = "Petitcodiac R. vs Hudson R. Blueback",
subtitle = "Size 50,000 Step 10,000") +
theme_bw() +
theme(legend.position = "none",
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
axis.title.y = element_markdown(),
axis.text.x = element_text(angle = 90,
size = 8,
vjust = 0.5))
PtR_HdR_plot

### Using ggsave to save the manhattan plots, or as I will now refer to it: ###
# Saving Private Plots (Ryan lol) ##
ggsave("figures/sliding-windows-fst/MIDA-x-NATLA-sz50-chrom19-spike.png",
plot = mxn50_chr19_spike_plot,
width = 10,
height = 4)
LS0tCnRpdGxlOiAiU2xpZGluZyBXaW5kb3dzIEFuYWx5c2lzIgpzdWJ0aXRsZTogIkJsdWViYWNrIFBvcHVsYXRpb25zLCBTaXplIDUwa2Igc3RlcCAxMGtiIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7ciBsaWJyYXJpZXMsIGVjaG8gPSBGQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZ2d0ZXh0KQpgYGAKCmBgYHtyIGRhdGFfb3JnLCBlY2hvID0gRkFMU0V9CmNvbHMgPC0gYygicmVnaW9uIiwgCiAgICAgICAgICAiY2hyIiwgCiAgICAgICAgICAibWlkUG9zIiwgCiAgICAgICAgICAiTnNpdGVzIiwgCiAgICAgICAgICAiRnN0IikKCgojIyMgQWx0YW1haGEgUml2ZXIgdnMgSHVkc29uIFJpdmVyICMjIwpBbFJfSGRSIDwtIHJlYWRfZGVsaW0oImRhdGEvc2xpZGluZ193aW5kb3dfZnN0X2JsdWViYWNrL0FsUi0teC0tSGRSYi0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCkFsUl9IZFJfY3VtIDwtIEFsUl9IZFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKCkFsUl9IZFIgPC0gQWxSX0hkUiAlPiUKICBpbm5lcl9qb2luKEFsUl9IZFJfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpBbFJfSGRSX2F4aXNfc2V0IDwtIEFsUl9IZFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIyBBbHRhbWFoYSBSaXZlciB2cyBQZXRpdGNvZGlhYyBSaXZlciAjIyMKQWxSX1B0UiA8LSByZWFkX2RlbGltKCJkYXRhL3NsaWRpbmdfd2luZG93X2ZzdF9ibHVlYmFjay9BbFItLXgtLVB0Ui0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCkFsUl9QdFJfY3VtIDwtIEFsUl9QdFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKCkFsUl9QdFIgPC0gQWxSX1B0UiAlPiUKICBpbm5lcl9qb2luKEFsUl9QdFJfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpBbFJfUHRSX2F4aXNfc2V0IDwtIEFsUl9QdFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIyBMYWtlIEhhcnR3ZWxsIHZzIEFsdGFtYWhhIFJpdmVyICMjIwpMa0hfQWxSIDwtIHJlYWRfZGVsaW0oImRhdGEvc2xpZGluZ193aW5kb3dfZnN0X2JsdWViYWNrL0xrSC0teC0tQWxSLS1zaXplLTUwMDAwLS1zdGVwLTEwMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKTGtIX0FsUl9jdW0gPC0gTGtIX0FsUiAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKTGtIX0FsUiA8LSBMa0hfQWxSICU+JQogIGlubmVyX2pvaW4oTGtIX0FsUl9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCkxrSF9BbFJfYXhpc19zZXQgPC0gTGtIX0FsUiAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShjZW50ZXIgPSBtZWFuKHBvc19jdW0pKQoKIyMjIExha2UgSGFydHdlbGwgdnMgSHVkc29uIFJpdmVyICMjIwpMa0hfSGRSIDwtIHJlYWRfZGVsaW0oImRhdGEvc2xpZGluZ193aW5kb3dfZnN0X2JsdWViYWNrL0xrSC0teC0tSGRSYi0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCkxrSF9IZFJfY3VtIDwtIExrSF9IZFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKCkxrSF9IZFIgPC0gTGtIX0hkUiAlPiUKICBpbm5lcl9qb2luKExrSF9IZFJfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpMa0hfSGRSX2F4aXNfc2V0IDwtIExrSF9IZFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIyBMYWtlIEhhcnR3ZWxsIHZzIExha2UgWW9uYWggIyMjCkxrSF9Ma1kgPC0gcmVhZF9kZWxpbSgiZGF0YS9zbGlkaW5nX3dpbmRvd19mc3RfYmx1ZWJhY2svTGtILS14LS1Ma1ktLXNpemUtNTAwMDAtLXN0ZXAtMTAwMDAudHN2IiwgCiAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDIsIAogICAgICAgICAgICAgICAgICAgIGRlbGltID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gY29scywKICAgICAgICAgICAgICAgICAgICBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpMa0hfTGtZX2N1bSA8LSBMa0hfTGtZICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpMa0hfTGtZIDwtIExrSF9Ma1kgJT4lCiAgaW5uZXJfam9pbihMa0hfTGtZX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKTGtIX0xrWV9heGlzX3NldCA8LSBMa0hfTGtZICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgojIyMgTGFrZSBIYXJ0d2VsbCB2cyBQZXRpdGNvZGlhYyBSaXZlciAjIyMKTGtIX1B0UiA8LSByZWFkX2RlbGltKCJkYXRhL3NsaWRpbmdfd2luZG93X2ZzdF9ibHVlYmFjay9Ma0gtLXgtLVB0Ui0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpCkxrSF9QdFJfY3VtIDwtIExrSF9QdFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKCkxrSF9QdFIgPC0gTGtIX1B0UiAlPiUKICBpbm5lcl9qb2luKExrSF9QdFJfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpMa0hfUHRSX2F4aXNfc2V0IDwtIExrSF9QdFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKCiMjIyBMYWtlIFlvbmFoIHZzIEFsdGFtYWhhIFJpdmVyICMjIwpMa1lfQWxSIDwtIHJlYWRfZGVsaW0oImRhdGEvc2xpZGluZ193aW5kb3dfZnN0X2JsdWViYWNrL0xrWS0teC0tQWxSLS1zaXplLTUwMDAwLS1zdGVwLTEwMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKTGtZX0FsUl9jdW0gPC0gTGtZX0FsUiAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKTGtZX0FsUiA8LSBMa1lfQWxSICU+JQogIGlubmVyX2pvaW4oTGtZX0FsUl9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCkxrWV9BbFJfYXhpc19zZXQgPC0gTGtZX0FsUiAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShjZW50ZXIgPSBtZWFuKHBvc19jdW0pKQoKIyMjIExha2UgWW9uYWggdnMgQWx0YW1haGEgUml2ZXIgIyMjCkxrWV9IZFIgPC0gcmVhZF9kZWxpbSgiZGF0YS9zbGlkaW5nX3dpbmRvd19mc3RfYmx1ZWJhY2svTGtZLS14LS1IZFJiLS1zaXplLTUwMDAwLS1zdGVwLTEwMDAwLnRzdiIsIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAyLCAKICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICJcdCIsIAogICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IGNvbHMsCiAgICAgICAgICAgICAgICAgICAgc2hvd19jb2xfdHlwZXMgPSBGQUxTRSkKTGtZX0hkUl9jdW0gPC0gTGtZX0hkUiAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShtYXhfcG9zID0gbWF4KG1pZFBvcykpICU+JQogIG11dGF0ZShwb3NfYWRkID0gbGFnKGN1bXN1bShtYXhfcG9zKSwgZGVmYXVsdCA9IDApKSAlPiUKICBzZWxlY3QoY2hyLCBwb3NfYWRkKQoKTGtZX0hkUiA8LSBMa1lfSGRSICU+JQogIGlubmVyX2pvaW4oTGtZX0hkUl9jdW0sIGJ5ID0gImNociIpICU+JQogIG11dGF0ZShwb3NfY3VtID0gbWlkUG9zICsgcG9zX2FkZCkKCkxrWV9IZFJfYXhpc19zZXQgPC0gTGtZX0hkUiAlPiUKICBncm91cF9ieShjaHIpICU+JQogIHN1bW1hcmlzZShjZW50ZXIgPSBtZWFuKHBvc19jdW0pKQoKIyMjIExha2UgWW9uYWggdnMgUGV0aXRjb2RpYWMgUml2ZXIgIyMjCkxrWV9QdFIgPC0gcmVhZF9kZWxpbSgiZGF0YS9zbGlkaW5nX3dpbmRvd19mc3RfYmx1ZWJhY2svTGtZLS14LS1QdFItLXNpemUtNTAwMDAtLXN0ZXAtMTAwMDAudHN2IiwgCiAgICAgICAgICAgICAgICAgICAgc2tpcCA9IDIsIAogICAgICAgICAgICAgICAgICAgIGRlbGltID0gIlx0IiwgCiAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gY29scywKICAgICAgICAgICAgICAgICAgICBzaG93X2NvbF90eXBlcyA9IEZBTFNFKQpMa1lfUHRSX2N1bSA8LSBMa1lfUHRSICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKG1heF9wb3MgPSBtYXgobWlkUG9zKSkgJT4lCiAgbXV0YXRlKHBvc19hZGQgPSBsYWcoY3Vtc3VtKG1heF9wb3MpLCBkZWZhdWx0ID0gMCkpICU+JQogIHNlbGVjdChjaHIsIHBvc19hZGQpCgpMa1lfUHRSIDwtIExrWV9QdFIgJT4lCiAgaW5uZXJfam9pbihMa1lfUHRSX2N1bSwgYnkgPSAiY2hyIikgJT4lCiAgbXV0YXRlKHBvc19jdW0gPSBtaWRQb3MgKyBwb3NfYWRkKQoKTGtZX1B0Ul9heGlzX3NldCA8LSBMa1lfUHRSICU+JQogIGdyb3VwX2J5KGNocikgJT4lCiAgc3VtbWFyaXNlKGNlbnRlciA9IG1lYW4ocG9zX2N1bSkpCgojIyMgUGV0aXRjb2RpYWMgUml2ZXIgdnMgSHVkc29uIFJpdmVyICMjIwpQdFJfSGRSIDwtIHJlYWRfZGVsaW0oImRhdGEvc2xpZGluZ193aW5kb3dfZnN0X2JsdWViYWNrL1B0Ui0teC0tSGRSYi0tc2l6ZS01MDAwMC0tc3RlcC0xMDAwMC50c3YiLCAKICAgICAgICAgICAgICAgICAgICBza2lwID0gMiwgCiAgICAgICAgICAgICAgICAgICAgZGVsaW0gPSAiXHQiLCAKICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBjb2xzLAogICAgICAgICAgICAgICAgICAgIHNob3dfY29sX3R5cGVzID0gRkFMU0UpClB0Ul9IZFJfY3VtIDwtIFB0Ul9IZFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UobWF4X3BvcyA9IG1heChtaWRQb3MpKSAlPiUKICBtdXRhdGUocG9zX2FkZCA9IGxhZyhjdW1zdW0obWF4X3BvcyksIGRlZmF1bHQgPSAwKSkgJT4lCiAgc2VsZWN0KGNociwgcG9zX2FkZCkKClB0Ul9IZFIgPC0gUHRSX0hkUiAlPiUKICBpbm5lcl9qb2luKFB0Ul9IZFJfY3VtLCBieSA9ICJjaHIiKSAlPiUKICBtdXRhdGUocG9zX2N1bSA9IG1pZFBvcyArIHBvc19hZGQpCgpQdFJfSGRSX2F4aXNfc2V0IDwtIFB0Ul9IZFIgJT4lCiAgZ3JvdXBfYnkoY2hyKSAlPiUKICBzdW1tYXJpc2UoY2VudGVyID0gbWVhbihwb3NfY3VtKSkKYGBgCgoKYGBge3IgQWxSX3hfSGRSfQpBbFJfSGRSX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBBbFJfSGRSLCAKICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IEFsUl9IZFJfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gQWxSX0hkUl9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgoQWxSX0hkUl9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJBbHRhbWFoYSBSLiB2cyBIdWRzb24gUi4gQmx1ZWJhY2siLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCkFsUl9IZFJfcGxvdAoKYGBgCgoKYGBge3IgQWxSX3hfUHRSfQpBbFJfUHRSX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBBbFJfUHRSLCAKICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IEFsUl9QdFJfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gQWxSX1B0Ul9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgoQWxSX1B0Ul9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJBbHRhbWFoYSBSLiB2cyBQZXRpdGNvZGlhYyBSLiBCbHVlYmFjayIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKQWxSX1B0Ul9wbG90CgpgYGAKCmBgYHtyIExrSF94X0FsUn0KTGtIX0FsUl9wbG90IDwtIGdncGxvdChkYXRhID0gTGtIX0FsUiwgCiAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBMa0hfQWxSX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IExrSF9BbFJfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKExrSF9BbFJfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTC4gSGFydHdlbGwgdnMgQWx0YW1haGEgUi4gQmx1ZWJhY2siLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCkxrSF9BbFJfcGxvdAoKYGBgCgpgYGB7ciBMa0hfeF9IZFJ9CkxrSF9IZFJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IExrSF9IZFIsIAogICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gTGtIX0hkUl9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBMa0hfSGRSX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChMa0hfSGRSX2F4aXNfc2V0JGNocikpKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIkwuIEhhcnR3ZWxsIHZzIEh1ZHNvbiBSLiBCbHVlYmFjayIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKTGtIX0hkUl9wbG90CgpgYGAKCmBgYHtyIExrSF94X0xrWX0KTGtIX0xrWV9wbG90IDwtIGdncGxvdChkYXRhID0gTGtIX0xrWSwgCiAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBMa0hfTGtZX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IExrSF9Ma1lfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKExrSF9Ma1lfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTC4gSGFydHdlbGwgdnMgTC4gWW9uYWggQmx1ZWJhY2siLCAKICAgICAgIHN1YnRpdGxlID0gIlNpemUgNTAsMDAwIFN0ZXAgMTAsMDAwIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZC5taW5vci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfbWFya2Rvd24oKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2anVzdCA9IDAuNSkpCkxrSF9Ma1lfcGxvdAoKYGBgCgpgYGB7ciBMa0hfeF9QdFJ9CkxrSF9QdFJfcGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IExrSF9QdFIsIAogICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IHBvc19jdW0sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEZzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvciA9IGFzX2ZhY3RvcihjaHIpKSkgKwogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjc1LCBzaXplID0gMC41KSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVsID0gTGtIX1B0Ul9heGlzX3NldCRjaHIsIAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBMa0hfUHRSX2F4aXNfc2V0JGNlbnRlcikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsMCksIAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0wLjA1LCAxKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSByZXAoYygiIzI0MmIzNSIsICIjODY5Y2E4IiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcXVlKGxlbmd0aChMa0hfUHRSX2F4aXNfc2V0JGNocikpKSkgKwogIGxhYnMoeCA9IE5VTEwsIAogICAgICAgeSA9ICJGc3QiLCAKICAgICAgIHRpdGxlID0gIkwuIEhhcnR3ZWxsIHZzIFBldGl0Y29kaWFjIFIuIEJsdWViYWNrIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpMa0hfUHRSX3Bsb3QKCmBgYAoKYGBge3IgTGtZX3hfQWxSfQpMa1lfQWxSX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBMa1lfQWxSLCAKICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IExrWV9BbFJfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gTGtZX0FsUl9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgoTGtZX0FsUl9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJMLiBZb25haCB2cyBBbHRhbWFoYSBSLiBCbHVlYmFjayIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKTGtZX0FsUl9wbG90CgpgYGAKCmBgYHtyIExrWV94X0hkUn0KTGtZX0hkUl9wbG90IDwtIGdncGxvdChkYXRhID0gTGtZX0hkUiwgCiAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBMa1lfSGRSX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IExrWV9IZFJfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKExrWV9IZFJfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiTC4gWW9uYWggdnMgSHVkc29uIFIuIEJsdWViYWNrIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpMa1lfSGRSX3Bsb3QKCmBgYAoKYGBge3IgTGtZX3hfUHRSfQpMa1lfUHRSX3Bsb3QgPC0gZ2dwbG90KGRhdGEgPSBMa1lfUHRSLCAKICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nID0gYWVzKHggPSBwb3NfY3VtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBGc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBhc19mYWN0b3IoY2hyKSkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC43NSwgc2l6ZSA9IDAuNSkgKwogIHNjYWxlX3hfY29udGludW91cyhsYWJlbCA9IExrWV9QdFJfYXhpc19zZXQkY2hyLCAKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gTGtZX1B0Ul9heGlzX3NldCRjZW50ZXIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLDApLCAKICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMC4wNSwgMSkpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gcmVwKGMoIiMyNDJiMzUiLCAiIzg2OWNhOCIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXF1ZShsZW5ndGgoTGtZX1B0Ul9heGlzX3NldCRjaHIpKSkpICsKICBsYWJzKHggPSBOVUxMLCAKICAgICAgIHkgPSAiRnN0IiwgCiAgICAgICB0aXRsZSA9ICJMLiBZb25haCB2cyBQZXRpdGNvZGlhYyBSLiBCbHVlYmFjayIsIAogICAgICAgc3VidGl0bGUgPSAiU2l6ZSA1MCwwMDAgU3RlcCAxMCwwMDAiKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHBhbmVsLmdyaWQubWFqb3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yLnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9tYXJrZG93bigpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZqdXN0ID0gMC41KSkKTGtZX1B0Ul9wbG90CgpgYGAKCmBgYHtyIFB0Ul94X0hkUn0KUHRSX0hkUl9wbG90IDwtIGdncGxvdChkYXRhID0gUHRSX0hkUiwgCiAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IGFlcyh4ID0gcG9zX2N1bSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gRnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gYXNfZmFjdG9yKGNocikpKSArCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNzUsIHNpemUgPSAwLjUpICsKICBzY2FsZV94X2NvbnRpbnVvdXMobGFiZWwgPSBQdFJfSGRSX2F4aXNfc2V0JGNociwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IFB0Ul9IZFJfYXhpc19zZXQkY2VudGVyKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwwKSwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTAuMDUsIDEpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IHJlcChjKCIjMjQyYjM1IiwgIiM4NjljYTgiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWUobGVuZ3RoKFB0Ul9IZFJfYXhpc19zZXQkY2hyKSkpKSArCiAgbGFicyh4ID0gTlVMTCwgCiAgICAgICB5ID0gIkZzdCIsIAogICAgICAgdGl0bGUgPSAiUGV0aXRjb2RpYWMgUi4gdnMgSHVkc29uIFIuIEJsdWViYWNrIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJTaXplIDUwLDAwMCBTdGVwIDEwLDAwMCIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgcGFuZWwuZ3JpZC5tYWpvci54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X21hcmtkb3duKCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmp1c3QgPSAwLjUpKQpQdFJfSGRSX3Bsb3QKCmBgYAoKYGBge3Igc2F2aW5nX3Bsb3RzLCBldmFsID0gRkFMU0V9CiMjIyBVc2luZyBnZ3NhdmUgdG8gc2F2ZSB0aGUgbWFuaGF0dGFuIHBsb3RzLCBvciBhcyBJIHdpbGwgbm93IHJlZmVyIHRvIGl0OiAjIyMKIyBTYXZpbmcgUHJpdmF0ZSBQbG90cyAoUnlhbiBsb2wpICMjCmdnc2F2ZSgiZmlndXJlcy9zbGlkaW5nLXdpbmRvd3MtZnN0L01JREEteC1OQVRMQS1zejUwLWNocm9tMTktc3Bpa2UucG5nIiwgCiAgICAgICBwbG90ID0gbXhuNTBfY2hyMTlfc3Bpa2VfcGxvdCwgCiAgICAgICB3aWR0aCA9IDEwLCAKICAgICAgIGhlaWdodCA9IDQpCmBgYAoK